Я знаю что это координаты умник.. пустые придирки не прокатят
я не только про координаты, я про всё
короче судя по всему ты пытаешься написать прогу которая бы думала вместо тебя
и это очень пичально
поэтому я просто оставлю это здесь
Не boolean а booexpr - это фильтр для группы, там никакие локалка не нужны.
Саму группу можно перебирать в цикле что правда дает шанс попасть в лимит операций и грохнуть поток.
Делать нужно примерно вот так :
function OnlyEnemyGroundAlive takes nothing returns boolean
return GetUnitState( GetFilterUnit(), UNIT_STATE_LIFE )> 0.405 and IsUnitEnemy( GetFilterUnit(), bj_groupEnumOwningPlayer ) and IsUnitType( GetFilterUnit(), UNIT_TYPE_GROUND )
endfunction
function DamageEnemy takes nothing returns nothing
call UnitDamageTarget( bj_lastReplacedUnit, GetEnumUnit(), 100.00, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
endfunction
function Temp takes nothing returns nothing
local group grp = CreateGroup( ) //создаём группу юнитов
local real dx = 0.00 // координата x
local real dy = 0.00 // координата y
set bj_groupEnumOwningPlayer == Player(0) // глобальная переменная чтобы передать данные в фильтр
call GroupEnumUnitsInRange( grp, dx, dy, 512.00, Condition( function OnlyEnemyGroundAlive) )
set bj_lastReplacedUnit = GetTriggerUnit( )// глобальная переменная чтобы передать данные в другую функцию.
call ForGroup( grp, function DamageEnemy )
call DestroyGroup( grp )
set grp = null
endfunction
Высота и скорость набора высоты в секунду. Не работает на наземных, чтобы заработало на нелетающих им нужно вручить и сразу же удалить способность 'Amrf' (Превратится в ворона). Хоспади в оглавлении статей все это есть, откуда вы на нашу голову рухнули?
Можно запоминать все деформации и потом вызывать их заново, но с отрицательной амплитудой чтобы они гасили предыдущие.
С одной вроде работает, но надо будет заносить их в массивы и т.д.
Diazon, можно даже проще сделать.
Создать способность на базе, к примеру, повышения защиты для предмета. Сделать +0 брони.
В триггере сделать так: Событие : юнит атакован Условие : на юните висит чума Действие : проверить, если нет способности +0 брони, то дать эту способность
И при смерти проверять имеет ли этот юнит способность +0 брони. Если да- то забрать её и создать труп.
gabriel_fisher, скорее всего, тебе нужны анимационные теги
теги бывают разные: alternate, gold, lumber, defend, flesh и др
например, у рабочего есть анимации attack, walk, death и если ему добавить тег lumber, тогда вместо этих анимаций будут проигрываться attack lumber, walk lumber и death lumber соответственно.
Suite, вот только придётся каждый раз вручную юзать этот спелл SсRealm, ты вопрос прочти прежде чем писать всякий бред
нормальным способом момент добычи отловить нельзя
недавно кидали костыль позволяющий отловить удар по дереву но он тут не особо поможет
ибо анимации будут перебивать друг друга
в общем как и сказал Suite меняй это в самой модели
Obelick, эта либо не трогает мультибоарды
она по точкам(location) в основном работает Obelick:
учить ради них джас и переписывать мне настолько лень
если ты нормально знаешь гуи и имеешь базовые знания по использованию гугл переводчика то переписать мультибоард на jass много времени не займёт
кроме того тебе не обязательно переписывать полностью
можно сконвертировать в код и поправить то что вызывает утечки
если ты говоришь об утечках в функции установки значения ячейки мультибоарда то их можно убрать следующим кодом
вставь его в шапку карты (туда где ты ALL.j подключал)
правда после этого автозаполнение строк/столбцов перестанет работать и придётся делать его циклом
еще раз - лучше скачать handle counter и посмотреть его показания, сколько объектов создается при касте
стремление сделать все безутечно похвально, но все хорошо в меру
Очень странный вопрос, мб запустить? При открытии карты в редакторе вы никаких роликов не увидите.
А так что вам мешает начинать ролик при старте? Событие инициализация или время прошло 0.00 сек. Как делать ролики смотрите в дефолтных картах близзардов.
во первых: не надо дублировать вопросы
во вторых: у меня твоя карта открывается
правда я не настолько сумасшедший чтобы юзать вин10
в третьих: размер мапы большой и может тупо не хватать памяти (особенно если юзаешь вин10)
советую попробовать переустановить jngp
если не поможет то сменить винду
Существует лимит то ли на кол-во операций, то ли на время выполнения, то ли и на то и на другое. При превышении лимита поток молча рубится.
В качестве шаманства: попробуй завернуть каждый цикл в отдельную функцию. Врядли это поможет само по себе, но зато потом проще будет переходить к следующему шагу - разнесению на отдельные потоки.
Fandalf, just to watch is resources on the site. I've already found the berserk, and smthing that looks similar to Daemon of Chaos Bloodthirste
Well that's all I could find. Your welcome :)
if GetLocalPlayer() == Player(p) { a = 0 }
т.е. текст невидим для нужного игрока? 0 альфы это же 100% прозрачность
а текст неверный потому что накладывается мб от разных игроков
хз насчет альфы
дело в том, что когда ты выводишь текст напрямую в дебаг сообщение на экран в функции C2S, там все нормально, а когда из функции с тексттагом, он уже продублирован
либо я невнимательно где то посмотрел, либо лыжи не едут
если вывести сообщения в конце C2S, получим все нормально,
Решения не было найдено! Самый верный способ сделать свою систему улучшений для юнитов, разбивая их на группы по признаку кол-ва грани у кости и кол-во костей, и в зависимости от этого повышать урон
скрин ошибки со строкой на которую ругается
а сори, плохо прочитал код Tobi123 дело говорит
ты даже не знаешь что такое локальные переменные
короче в статьи и не вылазь от туда пока не узнаешь
массивы или хэш
один фиг
только массивы быстрее
массивы надо знать обязательно
они используются не только в программировании но и в математике и физике
та же хэш таблица построена на основе массива
Ну так то темповые глобалки и структуры vjass'а юзают уже хрен знает сколько лет, ибо да это побыстрее, тут даже вопрос не в памяти а в том что создание переменной это отельная операция как и обнуления, что ненужно делать с глобалками (их порой даже создавать ненужно, ибо bj глобалки сделали близзард) но нужно действовать осторожно, думать головой, не вызывая иных событий где будут юзатся эти же переменные.
Ошибка при работе с MdlVis. Попробуй открыть модель в версии 1.40, там должно изменение видимости в ключевых кадрах должно заработать. Однако советую сделать копию модели, т.к. 1.40, если не изменяет память, ломает уже настроенную видимость.
Результат бонуса хп Кешируется, поэтом несмотря на уровень абилка всегда дает хп 1 уровня, а вот при ее удалении движок уберет юниту столько хп сколько указано в текущем уровне сплсобности, таким образом мы можем изменять хп юниту. Абилка в 2 лв,на первом уровне бонус маны иди хп 0, на втором обратный тому что М в хотим получить, к примеру если мы хотим получить 150 хп то пишем -150. Вручаем юниту абилку, ставим 2 уровень и тут же удаляем, движок добавит юниту 150 хп.
datar1231, Именно поэтому говорят не делать 2 две способности от друга потому когда юнита приходит приказ на использование способности он использует твою нестандартную способность но основываясь на айди стандартной способности или делай на основе другой или незанаю подействует ли канал.
не вздумай следовать этому совету, лол. игра может только 4 абилки в предмете разместить.
бери книгу заклинаний, клади туда че хочешь. её и добавляй. если нужна активка на предмете, то добавляй её дважды, чтобы было так:
В РО, такое невозможно сделать. Подробно на триггерах? Ну вот пример, а если нужно ещё подробнее, то учебник по Jass в руки.
На проклятие в РО,или любой другой спелл,ставится минимальная дистанция
function Trig_Spell_Actions takes nothing returns nothing
local location loc = Location(GetWidgetX(GetSpellAbilityUnit()),GetWidgetY(GetSpellAbilityUnit()))
local unit u = null
if GetSpellAbilityId() == 'АЙ ДИ СКИЛЛА' then
set u = CreateUnitAtLoc(GetOwningPlayer(GetSpellAbilityUnit()),'АЙ ДИ ДАММИ ЮНИТА-ЭФФЕКТА',loc,0.00)
call IssueTargetOrder(u,"curse",GetSpellTargetUnit())
endif
call RemoveLocation(loc)
set loc = null
endfunction
//===========================================================================
function InitTrig_Spell takes nothing returns nothing
local integer i = 0
set gg_trg_Spell = CreateTrigger()
loop
exitwhen i > 12
call TriggerRegisterPlayerUnitEvent(gg_trg_Spell, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set i = i + 1
endloop
call TriggerAddAction( gg_trg_Spell , function Trig_Spell_Actions )
endfunction
Потом тоже самое, только отследить каст проклятия, проверить тип юнита и удалить его из игры.
Sprite - крепление для эффекта огня, который появляется при повреждениях, если модель используется для здания или для юнита, классифицируемого в РО как механический.
Если еще немного покопатса на сайте в разделе декораций - можно нагрести кучу добра!
И вобще мой вам совет - научитесь минимальному моделингу: сможете клепать такие вещи за 3 минуты на коленке с необходимым вам видом, формой и текстурой.
при смерти юнита обзор вокруг него постепенно уменьшается
это своеобразный модификатор для обзора
он после этого сбрасывается на нормальное значение, но только если не помешать ему
воскрешение юнита - вмешивается в этот процесс
баг обходится быстрым сбросом вижена (дать -99999, и отнять... или наоборот... сейчас поищу описание)
. . .
В общем, я не нашёл точного решения, а тестить какое из них здесь точнее подойдёт - нет времени.
Вариант А - при воскрешении дать на 0.00 (или 0.01) сек абилку на +99999 ренжа обзора и забрать
Вариант Б - сделать то же самое, но на -9999 ренжа
Там есть манипуляции с 0.4 реал-тайма для перерасчёта видимых тайлов игроку, и это должно вроде как дать рывок в нормализации зрения героя...
Если не поможет - резко смени время суток (+12 часов), и потом обратно (ещё +12 часов), может помочь
Нужен ли тут временной промежуток в 0.00 или 0.01 сек - не знаю, проверь сам
Насколько я помню, я использовал разные имена LoadingScreenA.mdx, LoadingScreenB.mdx и т.д. для каждой карты. Естественно и их компоненты переименовывал соответственно - LoadingScreenABL(BR/TL/TR)
Прелоад по факту стартует только после исполнения загрузки карты. Таким образом штатным способ не сделаешь различные загрузочные экраны.
П.С. Кроме этого ты же прописываешь пути в импорте своих изображений. Несколько загрузочных экранов с одним путем? Врятли
П.С,. и как ты интересно собирался вызвать пролоад до загрузки карты?) Создашь функцию в чате лобби?)))
Похоже это две разные, полноценные модели. Портрет - на самом деле модель Ледяного, а не-портрет - Лесного. Не знаю как автор до этого додумался. Портрет сразу вшит в модель.
Просто уберите _Portrait из названия и всё будет работать.
Возможно, в анимации "birth" в модели этого здания также через пробел написано "portrait". Убери слово "portrait" в анимации "birth" и добавь его в анимации "stand" или создай отдельную анимацию "portrait". Также косяк может быть в самой анимации "portrait", если косяк там, то опять же придётся добавить через пробел слово "portrait" к анимации "stand" или вручную создать новую анимацию "portrait", скопировав ключевые кадры из "stand", чтобы не париться.
Если ты хочешь просто камеру и портрет - импортировать их под одним именем, но второй модели приписать _portrait. Хочешь одной моделью - сделать камеру в camera manager во вкладке окна. Там все интуитивно. Если именно объединить модели, то такой функционал был у одной утилицы с хайва, но нужна еще ручная настройка и это совсем не в модел эдиторе делается. веса от этого не сильно убавится, меш не так много весит обычно как анимации, так что запариваться не советую с этим.
Я импортирую и портрет и модель, Sniper.mdx и Sniper_Portrait.mdx, я их импортирую, но вместо портрета у снайпера случайный ракурс, как и без портрета. Может, кинуть файлы, сам протестишь?
local real x = GetRandomReal(GetRectMinX(GetPlayableMapRect()), GetRectMaxX(GetPlayableMapRect()))
local real y = GetRandomReal(GetRectMinY(GetPlayableMapRect()), GetRectMaxY(GetPlayableMapRect()))
...
(действия с координатами)
...
Любые действия с локейшном можно переделать под координаты, если не используется z-координата, как сказано выше. Но z-координату используют не только лишь все, мало кто может это делать.
И обнулять ничего не придётся, так как действительное число не утекает.
Я знаю только один способ избавления от утечек - писать код без них.Тебе нужен кто-то знающий игровые скрипты или злосчастный Jass. Иначе уровень неопределённости вопроса не позволит подсказать что-то дельное.
еще раз - лучше скачать handle counter и посмотреть его показания, сколько объектов создается при касте
стремление сделать все безутечно похвально, но все хорошо в меру
» WarCraft 3 / Проблема с моделью
» WarCraft 3 / Ошибка в коде
» WarCraft 3 / Переменные, утечки, стабильность
» WarCraft 3 / Конвертация равкодов
» WarCraft 3 / Высота
» WarCraft 3 / Ядовитое облако
» WarCraft 3 / заставить рабочего строить здание
» WarCraft 3 / Анимация юнита
» WarCraft 3 / звук и утечка
» WarCraft 3 / Открытие карт
» WarCraft 3 / Не открывается карта
» WarCraft 3 / Радиус постройки
» WarCraft 3 / jass if внутри loop
» WarCraft 3 / For
» WarCraft 3 / Десинхронизация
» WarCraft 3 / jass локальные переменные
» WarCraft 3 / Поверхности в MdlVis
» WarCraft 3 / Способности
» WarCraft 3 / Помогите вспомнить название карты
» WarCraft 3 / Модель стены
» WarCraft 3 / Видимость
» WarCraft 3 / Загрузочный экран
» WarCraft 3 / Портрет модели
» WarCraft 3 / Вопрос по утечкам